﻿Public Class frm_Recibo
    Enum estado
        insertar
        modificar
    End Enum
    Dim _accion As estado
    Dim _acceso As New AccesoBD
    Dim _legajo, _formaPago, _subtotal, _idRecibo As Integer


    Private Sub frm_Recibo_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.txtTotal.Enabled = False
        Me.txtFecha.Enabled = False
        Me.txtFecha.Text = Date.Now
        Me.cargoCombos()
        Me.cmbNombreFPago.Enabled = False
        Me.txtNumero.Enabled = False
        Me.numeroRecibo()
        Me.btn_grabar.Enabled = False
    End Sub

    Private Sub numeroRecibo()
        Dim consulta As String
        Dim tabla As New DataTable

        consulta = "select MAX(nroRecibo)+1 from Recibos"
        tabla = _acceso.ejecutaSQL(consulta)

        If IsDBNull(tabla.Rows(0)(0)) Then
            Me.lblNumRecibo.Text = 1000
        Else
            Me.lblNumRecibo.Text = tabla.Rows(0)(0)
        End If
        _idRecibo = lblNumRecibo.Text
    End Sub

    Private Sub cargoCombos()
        _acceso.load_combo(Me.cmbFormaPago, _acceso.devuelveTabla("FormasDePago"), "idFormaPago", "descripcion")
    End Sub

    Private Sub buscarPorLegajo(ByVal legajo As Integer)
        Dim con As String
        Dim tabla As New DataTable

        con = "select legajoAlumno, apellido + ', ' + nombre as nombre from Alumnos where legajoAlumno = " & legajo
        tabla = _acceso.ejecutaSQL(con)
        If tabla.Rows.Count = 0 Then
            MessageBox.Show("No existe el alumno ingresado", "Buscar", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Me.txtLegajoBusca.Focus()
            Exit Sub
        Else
            _acceso.load_combo(Me.cmbAlumno, tabla, "legajoAlumno", "nombre")
        End If
    End Sub

    Private Sub buscaPorNombre(ByVal nombre As String)
        Dim con As String
        Dim tabla As New DataTable

        con = "select legajoAlumno, apellido + ', ' + nombre as nombre from Alumnos where nombre like '" & nombre & "'" & " or apellido like '" & nombre & "'"
        tabla = _acceso.ejecutaSQL(con)
        If tabla.Rows.Count = 0 Then
            MessageBox.Show("No existe el alumno ingresado", "Buscar", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Me.txtNombreBusca.Focus()
            Exit Sub
        Else
            _acceso.load_combo(Me.cmbAlumno, tabla, "legajoAlumno", "nombre")
        End If
    End Sub

    Private Sub btnBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscar.Click
        If Not String.IsNullOrWhiteSpace(Me.txtLegajoBusca.Text) Then
            Me.buscarPorLegajo(Me.txtLegajoBusca.Text)
        End If
        If Not String.IsNullOrWhiteSpace(Me.txtNombreBusca.Text) Then
            Me.buscaPorNombre(Me.txtNombreBusca.Text)
        End If
    End Sub

    Private Sub cmbAlumno_SelectionChangeCommitted(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbAlumno.SelectionChangeCommitted
        _legajo = Me.cmbAlumno.SelectedValue
        Dim con As String
        Dim tabla As New DataTable
        con = "select a.nombre, a.apellido, cu.idCurso, t.nombre, c.nroCuota, c.fechaVencimiento, total="
        con &= " case 	when c.fechaVencimiento < GETDATE() then (((c.precio*c.interes)/100)+c.precio)"
        con &= " else c.precio"
        con &= " End"
        con &= " from CuotasXAlumno c, Alumnos a, TipoCurso t, Cursos cu "
        con &= " where(c.legajoAlumno = a.legajoAlumno And cu.idCurso = c.idCurso And cu.fechaInicio = c.fechaInicio And cu.idTipoCurso = t.idTipoCurso And c.pagada = 0)"
        con &= " and c.legajoAlumno = " & _legajo
        tabla = _acceso.ejecutaSQL(con)
        Me.grillaAlumno.Rows.Clear()
        Dim c As Integer
        For c = 0 To tabla.Rows.Count - 1
            Me.grillaAlumno.Rows.Add(tabla.Rows(c)(0), tabla.Rows(c)(1), tabla.Rows(c)(2), tabla.Rows(c)(3), tabla.Rows(c)(4), tabla.Rows(c)(5), tabla.Rows(c)(6))
        Next
    End Sub

    Private Sub cmbFormaPago_SelectionChangeCommitted(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbFormaPago.SelectionChangeCommitted
        _formaPago = Me.cmbFormaPago.SelectedValue
        
        Select Case _formaPago
            Case 1
                Me.cmbNombreFPago.SelectedIndex = -1
                Me.txtNumero.Text = ""
                Me.cmbNombreFPago.Enabled = False
                Me.txtNumero.Enabled = False
            Case 2                
                _acceso.load_combo(Me.cmbNombreFPago, _acceso.devuelveTabla("Tarjetas"), "idTarjeta", "nombre")
                Me.cmbNombreFPago.Enabled = True
                Me.txtNumero.Enabled = True
            Case 3                
                _acceso.load_combo(Me.cmbNombreFPago, _acceso.devuelveTabla("Bancos"), "idBanco", "nombre")
                Me.cmbNombreFPago.Enabled = True
                Me.txtNumero.Enabled = True
        End Select
    End Sub

    Private Sub grillaAlumno_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grillaAlumno.CellClick
        '
        Me.grillaAlumno.Rows(e.RowIndex).Cells("col_chk").Value = Not Me.grillaAlumno.Rows(e.RowIndex).Cells("col_chk").Value

        If Me.grillaAlumno.Rows(e.RowIndex).Cells("col_chk").Value = True Then
            _subtotal = _subtotal + Me.grillaAlumno.CurrentRow.Cells("col_subtotal").Value
            Me.txtTotal.Text = _subtotal
        Else
            _subtotal = _subtotal - Me.grillaAlumno.CurrentRow.Cells("col_subtotal").Value
            Me.txtTotal.Text = _subtotal
        End If
    End Sub

    Private Sub btnAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAgregar.Click
        If cmbFormaPago.SelectedIndex <> -1 Then
            Me.agregarFPago()
        End If
    End Sub

    Private Sub agregarFPago()
        If grillaFormaPago.Rows.Count = 2 Then
            Exit Sub
        End If
        If Not String.IsNullOrWhiteSpace(Me.txtImporte.Text) Then
            Me.grillaFormaPago.Rows.Add(Me.cmbFormaPago.Text, Me.cmbNombreFPago.Text, Me.txtNumero.Text, Me.txtImporte.Text)
        Else
            MessageBox.Show("Debe ingresar un importe")
            Me.txtImporte.Focus()
        End If

    End Sub
    Private Sub insertarRecibo()
        Dim consulta As String

        consulta = "insert into Recibos(nroRecibo,legajoAlumno,fecha,total) values (" & Me.lblNumRecibo.Text & ", " & _legajo & ", '" & Me.txtFecha.Text & "', " & Me.txtTotal.Text & ")"
        _acceso.ejecutarTransaccion(consulta)
    End Sub

    Private Sub insertarDetalleRecibo()
        Dim consulta, aux As String
        Dim dt As New DataTable

        For Each row As DataGridViewRow In Me.grillaAlumno.Rows
            If row.Cells("col_chk").Value = True Then
                aux = "select fechaInicio from Cuotas where idCurso = " & row.Cells("col_id_curso").Value & " and nroCuota = " & row.Cells("col_cuota").Value
                dt = _acceso.ejecutaSQL(aux)
                Dim fechaInicio As DateTime = dt.Rows(0)(0)

                consulta = "insert into DetalleRecibo values (" & _idRecibo
                consulta &= ", " & row.Cells("col_cuota").Value & ", "
                consulta &= row.Cells("col_id_curso").Value & ", '"
                consulta &= fechaInicio & "')"
                _acceso.ejecutarTransaccion(consulta)
            End If
        Next
    End Sub


    Private Sub btn_salir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_salir.Click
        Me.Close()
    End Sub

    Private Sub frm_Recibo_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        If MessageBox.Show("Esta seguro que desea salir?", "Salir", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.No Then
            e.Cancel = True
        Else
            e.Cancel = False
        End If
    End Sub

    Private Sub btn_nuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_nuevo.Click
        _accion = estado.insertar
        Me.btn_grabar.Enabled = True
        Me.txtLegajoBusca.Focus()
    End Sub

    Private Sub btn_grabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_grabar.Click
        _acceso.iniciarTransaccion()
        Me.insertarRecibo()
        Me.insertarDetalleRecibo()
        _acceso.finalizarTransaccion()
    End Sub
End Class